package com.gov.pic;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;

/**
 * 苹果照片的格式heic，不具有通用性，转成jpg
 * 注意：
 * 1. 文件名不能有空格
 *
 * @author ZhangDong
 * @date 2024/9/5 9:14
 */
public class Heic2JpgUtil {

    private static final Logger LOG = LoggerFactory.getLogger(Heic2JpgUtil.class);
    public static final String SUFFIX = ".jpg";

    /**
     * args格式 不太正常
     * 有时是：IMG_0616.HEIC 这种格式
     * 有时是：D:\生成的右击工具\heic2jpg\IMG_0616-副本.HEIC  这种格式
     * 不管哪样，我们一律用inFile.getAbsolutePath() 来获取它的绝对路径
     * 注意：多选文件时，它并不是一次性都塞到args里，而是每次只进来一个，也就是说args的长度最多为1
     *
     * @param args
     * @throws IOException
     */
    public static void heic2Jpg(String[] args) throws IOException {
        LOG.info("args:{}", args);
        long start = System.currentTimeMillis();
        if (args.length <= 0) {
            return;
        }
        // 相对路径的文件名，并非全路径
        String inputPath = args[0];
        File inFile = new File(inputPath);
        if (!inFile.exists()) {
            return;
        }
        String absolutePath = inFile.getAbsolutePath();
        String targetFileName = absolutePath.substring(0, absolutePath.lastIndexOf("."));
        String outputPath = targetFileName + SUFFIX;
        LOG.info("absolutePath:{}, targetFileName:{}, outputPath：{}", absolutePath, targetFileName, outputPath);
        String command = "D:\\ImageMagick\\ImageMagick-7.1.1-Q16-HDRI\\magick.exe " + absolutePath + " " + outputPath;
        try {
            Process process = Runtime.getRuntime().exec(command);
            int exitCode = process.waitFor();
            if (exitCode == 0) {
                LOG.info("{} Conversion successful, total consume:{}ms", inputPath, (System.currentTimeMillis() - start));
            } else {
                LOG.info("{} Conversion failed", inputPath);
            }
        } catch (Exception e) {
            LOG.info("{} Conversion failed, error:{}", inputPath, e);
        }
    }

}
